var MODE = '', ACTION = '', DIR = '', PROJECT = '', HOST = '', PARAMS = '', QOM = 'xinhu_', apiurl = '', token = '', device = '', CFROM = 'pc', ISDEMO = false, NOWURL = '', nwjsgui = false, apicloud = false, isapp = false;
var windows = null, ismobile = 0;

function initbody() { }
function bodyunload() { }
function globalbody() { }
function initApp() { }

function apiready() { 
	apicloud = true; initApp(); 
}

$(document).ready(function () {
	try {
		if (typeof (nw) == 'object') { 
			nwjsgui = nw;
		} else { 
			nwjsgui = require('nw.gui');
		} 
	} catch (e) {
		nwjsgui = false;
	}
	
	$(window).scroll(js.scrolla);
	HOST = js.gethost();
	adminid = js.request('adminid');
	token = js.request('token');
	js.getsplit();
	device = js.cookie('deviceid');
	if (device == '') device = js.now('time');
	js.savecookie('deviceid', device, 365);

	try {
		var winobj = js.request('winobj');
		if (nwjsgui) window.focus = function () { 
			nw.Window.get().focus() 
		}
		if (winobj != '') opener.js.openarr[winobj] = window;
	} catch (e) { }

	globalbody();
	initbody();
	$('body').click(function (e) {
		js.downbody(this, e);
	});
	$(window).unload(function () {
		js.onunload();
		bodyunload();
	});
	var openfrom = js.request('openfrom', js.getoption('openfrom', '', true));
	js.setoption('openfrom', openfrom, true);
	document.addEventListener('plusready', function () {
		plus.navigator.setStatusBarBackground('#1890ff');
		isapp = true;
		plus.key.addEventListener('backbutton', function () { js.back(); }, false);
		initApp();
	});
	if (HOST == '127.0.0.1') window.addEventListener('error', function (e) {
		var msg = '文件：' + e.filename + '\n行：' + e.lineno + '\n错误：<font color=red>' + e.message + '</font>';
		js.alert(msg, 'js错误');
	});
});
var js = { path: 'index', url: '', bool: false, login: {}, initdata: {}, openarr: {}, scroll: function () { } };
var isIE = true;
if (!document.all) isIE = false;
var get = function (id) { return document.getElementById(id) };
var isempt = function (an) { var ob = false; if (an == '' || an == null || typeof (an) == 'undefined') { ob = true; } if (typeof (an) == 'number') { ob = false; } return ob; }
var strreplace = function (str) { if (isempt(str)) return ''; return str.replace(/[ ]/gi, '').replace(/\s/gi, '') }
var strhtml = function (str) { if (isempt(str)) return ''; return str.replace(/\</gi, '&lt;').replace(/\>/gi, '&gt;') }
var form = function (an, fna) { if (!fna) fna = 'myform'; return document[fna][an] }
var xy10 = function (s) { var s1 = '' + s + ''; if (s1.length < 2) s1 = '0' + s + ''; return s1; };
js.getarr = function (caa, bo) {
	var s = '';
	for (var a in caa) s += ' @@ ' + a + '=>' + caa[a] + '';
	if (!bo) alert(s);
	return s;
}
js.getarropen = function (caa) {
	jsopenararass = caa;
	js.open('js/array.shtml');
}
if (typeof (api) == 'undefined') {
	var api = {};
	api.systemType = 'android';
	api.deviceId = '';
}
js.str = function (o) {
	o.value = strreplace(o.value);
}

js.getcan = function (i, dev) {
	var a = PARAMS.split('-');
	var val = '';
	if (!dev) dev = '';
	if (a[i]) val = a[i];
	if (!val) val = dev;
	return val;
}

js.gethost = function () {
	var url = location.href, sau = '';
	try { sau = url.split('//')[1].split('/')[0]; } catch (e) { }
	if (sau.indexOf('demo.rockoa.com') >= 0 || sau.indexOf('demo1.rockoa.com') >= 0) ISDEMO = true;
	var lse = url.lastIndexOf('/'); NOWURL = url.substr(0, lse + 1);
	QOM = NOWURL.replace(/\./g, '').replace(/\//g, '').replace(/\:/g, '') + '_';
	var cfrom = this.request('cfrom', '', url);
	if (!cfrom) cfrom = this.getoption('CFROM');
	if (cfrom) { this.setoption('CFROM', cfrom); CFROM = cfrom; }
	this.opentype = this.getoption('opentype');
	var otype = this.request('opentype', '', url);
	if (otype) { this.setoption('opentype', otype); this.opentype = otype; }
	return sau;
}
function winHb() {
	var winH = (!isIE) ? window.innerHeight : document.documentElement.offsetHeight;
	return winH;
}
function winWb() {
	var winH = (!isIE) ? window.innerWidth : document.documentElement.offsetWidth;
	return winH;
}
js.scrolla = function () {
	var top = $(document).scrollTop();
	js.scroll(top);
}
js.request = function (name, dev, url) {
	this.requestarr = {};
	if (!dev) dev = '';
	if (!name) return dev;
	if (!url) url = location.href;
	if (url.indexOf('\?') < 0) return dev;
	if (url.indexOf('#') > 0) url = url.split('#')[0];
	var neurl = url.split('\?')[1];
	neurl = neurl.split('&');
	var value = dev, i, val;
	for (i = 0; i < neurl.length; i++) {
		val = neurl[i].split('=');
		this.requestarr[val[0]] = val[1];
		if (val[0].toLowerCase() == name.toLowerCase()) {
			value = val[1];
			break;
		}
	}
	if (!value) value = '';
	return value;
}
js.now = function (type, sj) {
	if (!type) type = 'Y-m-d';
	if (type == 'now') type = 'Y-m-d H:i:s';
	var dt, ymd, his, weekArr, Y, m, d, w, H = 0, i = 0, s = 0, W;
	if (typeof (sj) == 'string') sj = sj.replace(/\//gi, '-');
	if (/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}/.test(sj)) {
		sj = sj.split(' ');
		ymd = sj[0];
		his = sj[1]; if (!his) his = '00:00:00';
		ymd = ymd.split('-');
		his = his.split(':');
		H = his[0]; if (his.length > 1) i = his[1]; if (his.length > 2) s = his[2];
		dt = new Date(ymd[0], ymd[1] - 1, ymd[2], H, i, s);
	} else {
		dt = (typeof (sj) == 'number') ? new Date(sj) : new Date();
	}
	weekArr = new Array('日', '一', '二', '三', '四', '五', '六');
	Y = dt.getFullYear();
	m = xy10(dt.getMonth() + 1);
	d = xy10(dt.getDate());
	w = dt.getDay();
	H = xy10(dt.getHours());
	i = xy10(dt.getMinutes());
	s = xy10(dt.getSeconds());
	W = weekArr[w];
	if (type == 'time') {
		return dt.getTime();
	} else {
		return type.replace('Y', Y).replace('m', m).replace('d', d).replace('H', H).replace('i', i).replace('s', s).replace('w', w).replace('W', W);
	}
}
js.float = function (num, w) {
	if (isNaN(num) || num == '' || !num || num == null) num = '0';
	num = parseFloat(num);
	if (!w && w != 0) w = 2;
	var m = num.toFixed(w);
	return m;
}
js.splittime = 0;
js.getsplit = function () {
	if (!js.servernow) return false;
	var dt = js.now('Y-m-d H:i:s');
	var d1 = js.now('time', dt);
	var d2 = js.now('time', js.servernow);
	js.splittime = d1 - d2;
}
js.serverdt = function (atype) {
	if (!atype) atype = 'Y-m-d H:i:s';
	var d1 = js.now('time') - js.splittime;
	var dt = js.now(atype, d1);
	return dt;
}
js.open = function (url, w, h, wina, can, wjcan) {
	if (wina) { try { var owina = this.openarr[wina]; owina.document.body; owina.focus(); return owina; } catch (e) { } }
	if (!w) w = 600; if (!h) h = 500;
	var l = (screen.width - w) * 0.5, t = (screen.height - h) * 0.5 - 50, rnd = parseInt(Math.random() * 50);
	if (rnd % 2 == 0) { l = l + rnd; t = t - rnd; } else { l = l - rnd; t = t + rnd; }
	if (!can) can = {};
	var s = 'resizable=yes,scrollbars=yes,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=no,status=no';
	var a1 = { 'left': '' + l + 'px', 'top': '' + t + 'px', 'width': '' + w + 'px', 'height': '' + h + 'px' };
	a1 = js.apply(a1, can);
	for (var o1 in a1) s += ',' + o1 + '=' + a1[o1] + '';
	var ja = (url.indexOf('?') >= 0) ? '&' : '?';
	if (wina) url += '' + ja + 'winobj=' + wina + '';
	if (typeof (nw) == 'undefined') {
		var opar = window.open(url, '', s);
	} else {
		var ocsn = js.apply({ 'frame': true, width: w, height: h, x: l, y: t, icon: 'assets/chat/images/logo.png' }, wjcan);
		if (url.substr(0, 4) != 'http') url = NOWURL + url;
		var opar = nw.Window.open(url, ocsn);
	}
	if (wina) this.openarr[wina] = opar;
	return false;
}

js.openrun = function (wina, act, ps1, ps2) {
	var owina = this.openarr[wina];
	try {
		if (owina) owina[act](ps1, ps2);
	} catch (e) {
		owina = false;
	}
	return owina;
}

js.onunload = function () {
	var a = js.openarr;
	for (var b in a) {
		try { a[b].close() } catch (e) { }
	}
	try {
		var winobj = js.request('winobj');
		if (winobj != '') opener.js.openarr[winobj] = false;
	} catch (e) { }
}

js.decode = function (str) {
	var arr = { length: -1 };
	try {
		arr = new Function('return ' + str + '')();
	} catch (e) { }
	return arr;
}

js.email = function (str) {
	if (isempt(str) || str.indexOf(' ') > -1) return false;
	if (str.indexOf('.') == -1 || str.indexOf('@') == -1) return false;
	var reg = new RegExp("[\\u4E00-\\u9FFF]+", "g");
	if (reg.test(str)) return false;
	return true;
}

js.reload = function () {
	location.reload();
}

js.move = function (id, rl) {
	var _left = 0, _top = 0, _x = 0, _right = 0, _y = 0;
	var obj = id; if (!rl) rl = 'left';
	if (typeof (id) == 'string') obj = get(id);
	var _Down = function (e) {
		try {
			var s = '<div id="divmovetemp" style="filter:Alpha(Opacity=0);opacity:0;z-index:99999;width:100%;height:100%;position:absolute;background-color:#000000;left:0px;top:0px;cursor:move"></div>';
			$('body').prepend(s);
			_x = e.clientX; _y = e.clientY; _left = parseInt(obj.style.left); _top = parseInt(obj.style.top); _right = parseInt(obj.style.right);
			document.onselectstart = function () { return false }
		} catch (e1) { }
	}
	var _Move = function (e) {
		try {
			var c = get('divmovetemp').innerHTML;
			var x = e.clientX - _x, y = e.clientY - _y;
			if (rl == 'left') obj.style.left = _left + x + 'px';
			if (rl == 'right') obj.style.right = _right - x + 'px';
			obj.style.top = _top + y + 'px';
		} catch (e1) { _Down(e) }
	}
	var _Up = function () {
		document.onmousemove = '';
		document.onselectstart = '';
		$('#divmovetemp').remove();
	}
	document.onmousemove = _Move;
	document.onmouseup = _Up;
}

js.setdev = function (val, dev) {
	var cv = val;
	if (isempt(cv)) cv = dev;
	return cv;
}

js.upload = function (call, can, glx) {
	if (!call) call = '';
	if (!can) can = {};
	js.uploadrand = js.now('YmdHis') + parseInt(Math.random() * 999999);
	var url = 'index.php?m=upload&d=public&callback=' + call + '&upkey=' + js.uploadrand + '';
	for (var i in can) if (i != 'title') url += '&' + i + '=' + can[i] + '';
	if (glx == 'url') return url;
	var s = '', tit = can.title; if (!tit) tit = '上传文件';
	js.tanbody('uploadwin', tit, 500, 300, {
		html: '<div style="height:280px;overflow:hidden"><iframe src="" name="winiframe" width="100%" height="100%" frameborder="0"></iframe></div>',
		bbar: 'none'
	});
	winiframe.location.href = url;
	return false;
}

js.locationshow = function (sid) {
	var url = 'index.php?m=kaoqin&d=main&a=location&id=' + sid + '';
	if (ismobile == 1) { js.location(url); return; }
	js.winiframe('地图位置查看', url);
	return false;
}

js.winiframemax = 45;
js.winiframewidth = '900x800'; //默认的宽x高
js.winiframe = function (tit, url) {
	var mxw = 900, mxh = 800, tar = this.winiframewidth.split('x');
	if (tar[0]) mxw = parseFloat(tar[0]);
	if (tar[1]) mxh = parseFloat(tar[1]);
	var hm = winHb() - 150; if (hm > mxh) hm = mxh; if (hm < 400) hm = 400;
	if (url.indexOf('wintype=max') > 0) {
		if (mxw < 1000) mxw = 1000;
		hm = winHb() - js.winiframemax;
	}
	var wi = winWb() - 150; if (wi > mxw) wi = mxw; if (wi < 700) wi = 700;
	js.tanbody('winiframe', tit, wi, 410, {
		html: '<div style="height:' + hm + 'px;overflow:hidden"><iframe src="" name="openinputiframe" width="100%" height="100%" frameborder="0"></iframe></div>',
		bbar: 'none'
	});
	openinputiframe.location.href = url;
	return false;
}

// 下载
js.downshow = function (id, fnun, cans) {
	if (this.fileoptWin(id)) return;
	if (appobj1('openfile', id)) return;
	if (!isempt(fnun)) { this.fileopt(id, 1); return false; }
	var url = 'api.php?m=upload&id=' + id + '&a=down';
	if (cans) for (var i in cans) url += '&' + i + '=' + cans[i] + '';
	this.location(url);
	return false;
}

js.downupdels = function (sid, said, o1) {
	js.confirm('确定要删除此文件吗？', function (lx) {
		if (lx == 'yes') {
			js.downupdel(sid, said, o1);
		}
	});
}

js.downupdel = function (sid, said, o1) {
	if (sid > 0) {
		$.get(js.getajaxurl('delfile', 'upload', 'public', { id: sid }));
	}
	if (o1) $(o1).parent().remove();
	var o = $('#view_' + said + '');
	var to = $('#count_' + said + '');
	var o1 = o.find('span'), s1 = '';
	for (i = 0; i < o1.length; i++)$(o1[i]).html('' + (i + 1));
	to.html('');
	if (i > 0) to.html('<font style="font-size:11px" color="#555555">文件:' + i + '</font>');
	o1 = o.find('font');
	for (i = 0; i < o1.length; i++)s1 += ',' + $(o1[i]).html();
	if (s1 != '') s1 = s1.substr(1);
	$('#' + said + '-inputEl').val(s1);
	$('#fileid_' + said + '').val(s1);
}

js.downupshow = function (a, showid, nbj) {
	var s = '', i = 0, s1 = '', fis;
	var o = $('#view_' + showid + '');
	for (i = 0; i < a.length; i++) {
		fis = 'assets/chat/images/fileicons/' + js.filelxext(a[i].fileext) + '.gif';
		if (js.isimg(a[i].fileext) && !isempt(a[i].thumbpath)) fis = a[i].thumbpath;
		s = '<div onmouseover="this.style.backgroundColor=\'#f1f1f1\'" onmouseout="this.style.backgroundColor=\'\'" style="padding:4px 5px;border-bottom:1px #eeeeee solid;font-size:14px"><span>' + (i + 1) + '</span><font style="display:none">' + a[i].id + '</font>、<img src="' + fis + '" align="absmiddle" height="20" width="20"> ' + a[i].filename + ' (' + a[i].filesizecn + ')';
		s += ' <a class="a" temp="yula" onclick="return js.fileopt(' + a[i].id + ',1)" href="javascript:;">下载</a>';
		s += ' <a class="a" temp="yula" onclick="return js.fileopt(' + a[i].id + ',0)" href="javascript:;">预览</a>';
		s += ' <a class="a" temp="dela" onclick="return js.downupdels(' + a[i].id + ',\'' + showid + '\', this)" href="javascript:;">×</a>';
		s += '</div>';
		o.append(s);
	}
	js.downupdel(0, showid, false);
	if (nbj) o.find('[temp="dela"]').remove();//禁止编辑
}

js.loading = function (txt) {
	js.msg('wait', txt);
}

js.msgerror = function (txt) {
	js.msg('msg', txt);
}

js.unloading = function () { js.msg(); }

// 文件操作id文件id,lx0预览,1下载,2编辑
js.fileopt = function (id, lx) {
	if (!lx) lx = 0;
	if (ismobile == 1 && lx == 1 && this.fileoptWin(id)) return;
	js.loading('加载中...');

	var gurl = '/file/attachment/fileinfo?id=' + id + '&type=' + lx + '&ismobile=' + ismobile;

	$.ajax({
		type: 'get', url: gurl, dataType: 'json',
		success: function (ret) {
			js.unloading();
			if (ret.status) {
				var da = ret.data;
				var ext = da.fileext;
				var url = da.url;
				if (ismobile == 1) {
					if (da.type == 0 && !da.isview && appobj1('openfile', id)) return; //不能预览就用app打开
					if (da.type == 0 && !da.isview && js.fileoptWin(id)) return; //不能预览就用app打开
					if (da.type == 1 && appobj1('openfile', id)) return; //下载用app的
					if (da.type == 0 && !js.isimg(ext)) {
						if (appobj1('openWindow', url)) return;
						if (js.apiopenWin(url)) return;
					}
				}

				// 下载直接跳转
				if (da.type == 1) {
					js.location(url);
					return;
				}
				if (js.isimg(ext)) {
					$.imgview({ 'url': url, 'ismobile': ismobile == 1, 'downbool': false });

				} else if (ext == 'rockedit') {
					if (ismobile == 0) {
						js.open(url, screen.width - 200, screen.height - 200);
					} else {
						js.location(url);
					}
				} else if (ext == 'rockoffice') {
					js.sendeditoffices(url);
				} else {
					url += '&wintype=max';
					if (ismobile == 0) {
						if (!nwjsgui) {
							js.winiframe(da.filename, url);
						} else {
							js.open(url, 900, 500);
						}
					} else {
						js.location(url);
					}
				}
			} else {
				js.msgerror(ret.data);
			}
		},
		error: function (e) {
			js.unloading();
			js.msg('msg', '处理出错:' + e.responseText);
		}
	});
}

js.fileoptWin = function (id) {
	var otype = this.opentype, ourl = 'widget://index.html';
	if (otype && otype != 'nei') ourl = otype;
	var bstr = '{"name":"文件","fileid":"' + id + '","url":"fileopen","fileext":""}';
	var url = '' + ourl + '?bstr=' + bstr + '';
	return this.apiopenWin(url);
}
js.apiopenWin = function (url) {
	if (!apicloud) return false;
	api.openWin({ name: 'url' + js.getrand(), url: url, bounces: false, softInputBarEnabled: false, slidBackEnabled: true, vScrollBarEnabled: false, hScrollBarEnabled: false, allowEdit: false, progress: { type: '', title: '', text: '', color: '' } });
	return true;
}

// 文件预览
js.yulanfile = function (id, ext, pts, sne, fnun, isxq) {
	if (!isempt(fnun)) { this.fileopt(id, 0); return false; }
	var url = 'index.php?m=public&a=fileviewer&id=' + id + '&wintype=max';
	if (pts != '' && js.isimg(ext)) {
		$.imgview({ 'url': pts, 'ismobile': ismobile == 1, 'downbool': false });
		$.get('api.php?m=upload&a=logs&fileid=' + id + '&type=0');
		return false;
	}
	if (ismobile == 1) {
		var docsx = ',doc,docx,ppt,pptx,xls,xlsx,pdf,txt,html,';
		if (docsx.indexOf(',' + ext + ',') == -1)
			if (appobj1('openfile', id)) return;
		if (appobj1('openWindow', url)) return;
		js.location(url);
	} else {
		if (!sne) sne = '文件预览';
		if (isxq == 'xq') { 
			js.open(url, screen.width - 200, screen.height - 200) 
		} else { 
			js.winiframe(sne, url);
		}
	}
	return false;
}
js.apiurl = function (m, a, cans) {
	return m;
}
js.getajaxurl = function (a, m, d, can) {
	if (!can) can = {};
	if (!m) m = MODE;
	if (!d) d = DIR;
	if (d == 'null') d = '';
	var jga = a.substr(0, 1);
	if (jga == '@') a = a.substr(1);
	var url = '' + this.path + '.php?a=' + a + '&m=' + m + '&d=' + d + '';
	for (var c in can) url += '&' + c + '=' + can[c] + '';
	if (jga != '@') url += '&ajaxbool=true';
	url += '&rnd=' + parseInt(Math.random() * 999999) + '';
	return url;
}
js.formatsize = function (size) {
	var arr = new Array('Byte', 'KB', 'MB', 'GB', 'TB', 'PB');
	var e = Math.floor(Math.log(size) / Math.log(1024));
	var fs = size / Math.pow(1024, Math.floor(e));
	return js.float(fs) + ' ' + arr[e];
}
js.getselectval = function (o) {
	var str = '';
	for (var i = 0; i < o.length; i++) {
		if (o[i].selected) {
			str += ',' + o[i].value + '';
		}
	}
	if (str != '') str = str.substr(1);
	return str;
}
js.setselectval = function (o, val) {
	var str = '', vals = ',' + val + ',';
	for (var i = 0; i < o.length; i++) {
		if (vals.indexOf(',' + o[i].value + ',') > -1) {
			o[i].selected = true;
		}
	}
}
js.getformdata = function (nas) {
	var da = {}, ona = '', o, type, val, na, i, obj;
	if (!nas) nas = 'myform';
	obj = document[nas];
	for (i = 0; i < obj.length; i++) {
		o = obj[i]; type = o.type, val = o.value, na = o.name;
		if (!na) continue;
		if (type == 'checkbox') {
			val = '0';
			if (o.checked) val = '1';
			da[na] = val;
		} else if (type == 'radio') {
			if (o.checked) da[na] = val;
		} else {
			da[na] = val;
		}
		if (na.indexOf('[]') > -1) {
			if (ona.indexOf(na) < 0) ona += ',' + na + '';
		}
	}
	if (ona != '') {
		var onas = ona.split(',');
		for (i = 1; i < onas.length; i++) {
			da[onas[i].replace('[]', '')] = js.getchecked(onas[i]);
		}
	}
	return da;
}
js.getdata = function (na, da) {
	if (!da) da = {};
	var obj = $('#' + na + '');
	var inp = obj.find('input,select');
	for (var i = 0; i < inp.length; i++) {
		var type = inp[i].type;
		var val = inp[i].value;
		if (type == 'checkbox') {
			val = '0';
			if (inp[i].checked) val = '1';
		}
		var ad1 = inp[i].name;
		if (!ad1) ad1 = inp[i].id;
		da[ad1] = val;
	}
	return da;
}
js.selall = function (o, na, bh) {
	var i, oi1;
	if (bh) {
		o1 = $("input[name^='" + na + "']");
	} else {
		o1 = $("input[name='" + na + "']");
	}
	for (i = 0; i < o1.length; i++) {
		if (!o1[i].disabled) o1[i].checked = o.checked;
	}
}
js.getchecked = function (na, bh) {
	var s = '';
	var o1;
	if (bh) {
		o1 = $("input[name^='" + na + "']");
	} else {
		o1 = $("input[name='" + na + "']");
	}
	for (var i = 0; i < o1.length; i++) {
		if (o1[i].checked && !o1[i].disabled) s += ',' + o1[i].value + '';
	}
	if (s != '') s = s.substr(1);
	return s;
}
js.cookie = function (name) {
	var str = document.cookie, cda, val = '', arr, i;
	if (str.length <= 0) return '';
	arr = str.split('; ');
	for (i = 0; i < arr.length; i++) {
		cda = arr[i].split('=');
		if (name.toLowerCase() == cda[0].toLowerCase()) {
			val = cda[1];
			break;
		}
	}
	if (!val) val = '';
	return val;
}
js.savecookie = function (name, value, d) {
	var expires = new Date();
	if (!d) d = 365;
	if (!value) d = -10;
	expires.setTime(expires.getTime() + d * 24 * 60 * 60 * 1000);
	var str = '' + name + '=' + value + ';expires=' + expires.toGMTString() + ';path=/;SameSite=Strict';
	document.cookie = str;
}
js.backtop = function (ci) {
	if (!ci) ci = 0;
	$('body,html').animate({ scrollTop: ci });
	return false;
}
js.backto = function (oid) {
	if (!get(oid)) return;
	var of = $('#' + oid + '').offset();
	this.backtop(of.top);
	return false;
}
js.applyIf = function (a, b) {
	if (!a) a = {};
	if (!b) b = {};
	for (var c in b) if (typeof (a[c]) == 'undefined') a[c] = b[c];
	return a;
}
js.apply = function (a, b) {
	if (!a) a = {};
	if (!b) b = {};
	for (var c in b) a[c] = b[c];
	return a;
}
js.tanbodyindex = 90;
js.tanbody = function (act, title, w, h, can1) {
	this.tanbodyindex++;
	var can = js.applyIf(can1, { html: '', msg: '', showfun: function () { }, bodystyle: '', guanact: '', titlecls: '', btn: [] });
	var l = (winWb() - w - 50) * 0.5, t = (winHb() - h - 50) * 0.5;
	var s = '';
	var mid = '' + act + '_main';
	$('#' + mid + '').remove();
	var posta = 'fixed';
	if (js.path == 'admin') posta = 'absolute';
	s += '<div id="' + mid + '" tanbody="rock" style="position:' + posta + ';background-color:#ffffff;left:' + l + 'px;width:' + w + 'px;top:' + t + 'px;z-index:' + this.tanbodyindex + ';box-shadow:0px 0px 10px rgba(0,0,0,0.3);">';
	s += '	<div class="title ' + can.titlecls + '" style="-moz-user-select:none;-webkit-user-select:none;user-select:none;">';
	s += '		<table border="0"  width="100%" cellspacing="0" cellpadding="0"><tr>';
	s += '			<td height="28" style="font-size:14px;color:white;padding-left:8px" width="100%" onmousedown="js.move(\'' + mid + '\')" id="' + act + '_title">' + title + '</td>';
	s += '			<td><div onmouseover="this.style.backgroundColor=\'#3a3f51\'" onmouseout="this.style.backgroundColor=\'\'" style="padding:0px 8px;height:40px;overflow:hidden;cursor:pointer;" onclick="js.tanclose(\'' + act + '\',\'' + can.guanact + '\')"><div id="' + act + '_spancancel" style="height:16px;overflow:hidden;width:16px;background:url(/assets/chat/images/wclose.png);margin-top:12px"></div></div></td>';
	s += '		</tr></table>';
	s += '	</div>';
	s += '	<div id="' + act + '_body" style="' + can.bodystyle + '">';
	s += can.html;
	s += '	</div>';
	s += '	<div id="' + act + '_bbar" style="padding:5px 10px;background:#eeeeee;line-height:30px;" align="right"><span id="msgview_' + act + '">' + can.msg + '</span>&nbsp;';
	for (var i = 0; i < can.btn.length; i++) {
		var a = can.btn[i];
		s += '<button class="btn btn-success" id="' + act + '_btn' + i + '" onclick="return false">';
		if (!isempt(a.icons)) s += '<i class="fa fa-' + a.icons + '"></i>&nbsp; ';
		s += '' + a.text + '</button>&nbsp; ';
	}
	s += '		<button class="btn btn-default" id="' + act + '_cancel" onclick="return js.tanclose(\'' + act + '\',\'' + can.guanact + '\')">取消</button>';
	s += '	</div>';
	s += '</div>';
	js.xpbody(act, can.mode);
	$('body').prepend(s);
	if (can.closed == 'none') {
		$('#' + act + '_bbar').remove();
		$('#' + act + '_spancancel').parent().remove();
	}
	if (can.bbar == 'none') $('#' + act + '_bbar').remove();
	this.tanoffset(act);
	can.showfun(act);
}
js.tanoffset = function (act) {
	var mid = '' + act + '_main';
	var lw = get(mid).offsetWidth, lh = get(mid).offsetHeight, l, t;
	l = (winWb() - lw) * 0.5; t = (winHb() - lh - 20) * 0.5;
	if (t < 0) t = 1;
	$('#' + mid + '').css({ 'left': '' + l + 'px', 'top': '' + t + 'px' });
}
js.tanclose = function (act, guan) {
	if (!isempt(guan)) {
		var s = guan.split(',');
		for (var i = 0; i < s.length; i++)$('#' + s[i] + '_main').remove();
	}
	$('#' + act + '_main').remove();
	js.xpbody(act, 'none');
	return false;
}
js.xpbodysplit = 0;
js.xpbody = function (act, type) {
	if (type == 'none') {
		$("div[xpbody='" + act + "']").remove();
		if (!get('xpbg_bodydds')) $('div[tanbody]').remove();
		return;
	}
	if (get('xpbg_bodydds')) return false;
	var H = (document.body.scrollHeight < winHb()) ? winHb() - this.xpbodysplit - 5 : document.body.scrollHeight - this.xpbodysplit * 2;
	var W = document.documentElement.scrollWidth + document.body.scrollLeft - this.xpbodysplit * 2;

	var bs = '<div id="xpbg_bodydds" xpbody="' + act + '" oncontextmenu="return false" style="position:absolute;display:none;width:100vw;height:100vh;opacity:0.3;left:0;top:0;background-color:#000000;z-index:80"></div>';
	$('body').prepend(bs);
	$('#xpbg_bodydds').fadeIn(300);
}
js.focusval = '0';
js.number = function (obj) {
	val = strreplace(obj.value);
	if (!val) {
		obj.value = js.focusval;
		return false;
	}
	if (isNaN(val)) {
		js.msg('msg', '输入的不是数字');
		obj.value = js.focusval;
		obj.focus();
	} else {
		var o1 = $(obj);
		var min = o1.attr('minvalue');
		if (isempt(min)) min = o1.attr('min');
		if (min && parseFloat(val) < parseFloat(min)) val = min;
		var max = o1.attr('maxvalue');
		if (isempt(max)) max = o1.attr('max');
		if (max && parseFloat(val) > parseFloat(max)) val = max;
		obj.value = val;
	}
}
js.setmsg = function (txt, col, ids) {
	if (!ids) ids = 'msgview';
	$('#' + ids + '').html(js.getmsg(txt, col));
}
js.getmsg = function (txt, col) {
	if (!col) col = 'red';
	var s = '';
	if (!txt) txt = '';
	if (txt.indexOf('...') > 0) {
		s = '<img src="/assets/chat/images/loading.gif" height="16" width="16" align="absmiddle"> ';
		col = '#ff6600';
	}
	s += '<span style="color:' + col + '">' + txt + '</span>';
	if (!txt) s = '';
	return s;
}
js.setcopy = function (txt) {
	if (!txt) txt = '';
	txt = escape(txt);
	js.savecookie('copy_text', txt, 1);
	js.msg('msg', '复制成功，仅限本站使用');
	return false;
}
js.getcopy = function () {
	var txt = js.cookie('copy_text');
	txt = unescape(txt);
	return txt;
}
js.chao = function (obj, shuzi, span, guo) {
	var cont = (guo) ? strreplace(obj.value) : obj.value;
	if (cont.length > shuzi) {
		alert("您输入的字符超过" + shuzi + "个字符\n\n将被截掉" + (cont.length - shuzi) + "个字符！");
		cont = cont.substring(0, shuzi);
		obj.value = cont;
	}
	if (guo) obj.value = cont;
	if (span) get(span).innerHTML = obj.value.length;
}
js.debug = function (s) {
	if (typeof (console) != 'object') return;
	console.error(s);
}
js.alert = function (txt, tit, fun) {
	js.confirm(txt, fun, '', tit, 2, '');
}
js.wait = function (txt, tit, fun) {
	js.confirm(txt, fun, '', tit, 3, '');
}
js.alertclose = function () {
	js.tanclose('confirm');
}
js.tanstyle = 0;
js.confirm = function (txt, fun, tcls, tis, lx, ostr, bstr) {
	if (!lx) lx = 0;
	var h = '<div style="padding:20px;line-height:30px" align="center">', w = 320;
	if (lx == 1) w = 350;
	if (w > winWb()) w = winWb() - 10;
	if (lx == 1) {
		if (!tcls) tcls = ''; if (!ostr) ostr = ''; if (!bstr) bstr = '';
		h = '<div style="padding:10px;" align="center">' + ostr + '';
		h += '<div align="left" style="padding-left:10px">' + txt + '</div>';
		h += '<div ><textarea class="input form-control" id="confirm_input" style="width:' + (w - 40) + 'px;height:60px">' + tcls + '</textarea></div>' + bstr + '';
	} else if (lx == 3) {
		h += '<img src="/assets/chat/images/mloading.gif" height="32" width="32" align="absmiddle">&nbsp; ' + txt + '';
	} else {
		h += '' + txt + '';
	}
	h += '</div>';
	h += '<div style="padding:0" align="center">';
	var yts = (this.tanstyle == 1) ? 'webbtn' : 'btn';
	h += '	<button id="confirm_btn1" class="' + yts + ' btn-default" sattr="yes" type="button">';
	if (this.tanstyle == 0) h += '<i class="fa fa-ok"></i>&nbsp;';
	h += '确定</button>';
	if (lx < 2) {
		h += ' &nbsp;&nbsp;&nbsp;&nbsp;<button sattr="no" class="' + yts + ' btn-danger" id="confirm_btn" type="button">';
		if (this.tanstyle == 0) h += '<i class="fa fa-remove"></i>&nbsp;';
		h += '取消</button>';
	}
	h += '</div>';
	h += '<div class="blank10"></div>';
	if (!tcls) tcls = 'danger'; if (lx == 1) tcls = 'info';
	if (!tis) tis = '<i class="fa fa-question-sign"></i>&nbsp;系统提示';
	js.tanbody('confirm', tis, w, 200, { closed: 'none', bbar: 'none', html: h, titlecls: tcls });
	function backl(e) {
		var jg = $(this).attr('sattr'), val = $('#confirm_input').val();
		if (val == null) val = '';
		if (typeof (fun) == 'function') {
			var cbo = fun(jg, val);
			if (cbo) return false;
		}
		js.alertclose();
		return false;
	}
	$('#confirm_btn1').click(backl);
	if (get('confirm_btn')) {
		$('#confirm_btn').click(backl);
		get('confirm_btn').focus();
	}
	if (lx == 1) get('confirm_input').focus();
}
js.prompt = function (tit, txt, fun, msg, ostr, bstr) {
	js.confirm(txt, fun, msg, tit, 1, ostr, bstr);
}
js.msg = function (lx, txt, sj) {
	clearTimeout(this.msgshowtime);
	if (typeof (sj) == 'undefined') sj = 5;
	$('#msgshowdivla').remove();
	if (lx == 'none' || !lx) {
		return;
	}
	if (lx == 'wait') {
		txt = '<img src="/assets/chat/images/loadings.gif" height="14" width="15" align="absmiddle"> ' + txt;
		sj = 60;
	}
	if (lx == 'msg') txt = '<font color=red>' + txt + '</font>'; var t = 10;
	if (get('header_title')) t += 50;
	var s = '<div onclick="$(this).remove()" id="msgshowdivla" style="position:fixed;top:' + t + 'px;z-index:200;" align="center"><div style="padding:8px 20px;background:rgba(0,0,0,0.7);color:white;font-size:16px;border-radius:5px">' + txt + '</div></div>';
	$('body').append(s);
	var w = $('#msgshowdivla').width(), l = (winWb() - w) * 0.5;
	$('#msgshowdivla').css('left', '' + l + 'px');
	if (sj > 0) this.msgshowtime = setTimeout("$('#msgshowdivla').remove()", sj * 1000);
}
js.repempt = function (stt, v) {
	var s = stt;
	if (isempt(s)) s = v;
	return s;
}
js.getrand = function () {
	var r;
	r = '' + new Date().getTime() + '';
	r += '_' + parseInt(Math.random() * 9999) + '';
	return r;
}
js.arraystr = function (str) {
	if (!str) str = '1|是,0|否';
	var s = str.split(','),
		d = [], i, s1, nv, vv;
	for (i = 0; i < s.length; i++) {
		s1 = s[i].split('|');
		nv = s1[0];
		vv = nv;
		if (s1.length > 1) nv = s1[1];
		d.push([vv, nv]);
	}
	return d;
}
js._bodyclick = {};
js.downbody = function (o1, e) {
	this.allparent = '';
	this.getparenta($(e.target), 0);
	var a, s = this.allparent, a1;
	for (a in js._bodyclick) {
		a1 = js._bodyclick[a];
		if (s.indexOf(a) < 0) {
			if (a1.type == 'hide') {
				$('#' + a1.objid + '').hide();
			} else {
				$('#' + a1.objid + '').remove();
			}
		}
	}
	return true;
}
js.addbody = function (num, type, objid) {
	js._bodyclick[num] = { type: type, objid: objid };
}
js.getparenta = function (o, oi) {
	try {
		if (o[0].nodeName.toUpperCase() == 'BODY') return;
	} catch (e) { return; }
	var id = o.attr('id');
	if (!isempt(id)) {
		this.allparent += ',' + id;
	}
	this.getparenta(o.parent(), oi + 1);
}
js.ajaxwurbo = false;
js.ajaxbool = false;
js.ajax = function (url, da, fun, type, efun, tsar) {
	if (js.ajaxbool && !js.ajaxwurbo) return;
	if (!da) da = {}; if (!type) type = 'get'; if (!tsar) tsar = ''; tsar = tsar.split(',');
	if (typeof (fun) != 'function') fun = function () { };
	if (typeof (efun) != 'function') efun = function () { };
	var atyp = type.split(','), dtyp = ''; type = atyp[0];
	if (atyp[1]) dtyp = atyp[1];
	js.ajaxbool = true; if (tsar[0]) js.msg('wait', tsar[0]);
	var ajaxcan = {
		type: type,
		data: da, url: url,
		success: function (str) {
			js.ajaxbool = false;
			try {
				if (tsar[1]) js.msg('success', tsar[1]);
				fun(str);
			} catch (e) {
				js.msg('msg', str);
				js.debug(e);
			}
		}, error: function (e) {
			js.ajaxbool = false;
			js.msg('msg', '处理出错:' + e.responseText + '');
			efun(e.responseText);
		}
	};
	if (dtyp) ajaxcan.dataType = dtyp;
	$.ajax(ajaxcan);
}
js.setoption = function (k, v, qzb) {
	if (!qzb) k = QOM + k;
	try {
		if (isempt(v)) {
			localStorage.removeItem(k);
		} else {
			localStorage.setItem(k, escape(v));
		}
	} catch (e) {
		js.savecookie(k, escape(v));
	}
	return true;
}
js.getoption = function (k, dev, qzb) {
	var s = '';
	if (!qzb) k = QOM + k;
	try { 
		s = localStorage.getItem(k);
	} catch (e) { 
		s = js.cookie(k);
	}
	if (s) s = unescape(s);
	if (isempt(dev)) dev = '';
	if (isempt(s)) s = dev;
	return s;
}
js.location = function (url) {
	location.href = url;
}
js.backla = function (msg) {
	if (msg) if (!confirm(msg)) return;
	try { api.closeWin(); } catch (e) { }
}
js.sendevent = function (typ, na, d) {
	if (!d) d = {};
	d.opttype = typ;
	if (!na) na = 'xinhuhome';
	if (api.sendEvent) api.sendEvent({
		name: na,
		extra: d
	});
}
js.isimg = function (lx) {
	var ftype = '|png|jpg|bmp|gif|jpeg|';
	var bo = false;
	if (ftype.indexOf('|' + lx + '|') > -1) bo = true;
	return bo;
}
js.changeuser_before = function (na) { }
js.changeuser_after = function () { }
js.changeuser = function (na, lx, tits, ocans) {
	var h = winHb() - 70, w = 350; if (!ocans) ocans = {};
	if (h > 400) h = 400; if (!tits) tits = '请选择...';
	var nibo = ((lx == 'changedeptusercheck' || lx == 'deptusercheck') && ismobile == 0);
	if (nibo) w = 650;
	var formname = '';
	var can = {
		'changetype': lx,
		'showview': 'showuserssvie',
		'titlebool': false,
		'changevalue': '',
		'changerange': '', //选择范围
		'oncancel': function () {
			js.tanclose('changeaction');
		},
		'onselect': function (sna, sid) {
			js.changeuser_after(this.formname, this, sna, sid);
		}
	};
	if (na) {
		can.idobj = get(na + '_id');
		can.nameobj = get(na);
		if (can.nameobj) formname = can.nameobj.name;
	}

	can.formname = formname;
	var bcar = js.changeuser_before(formname, 1), i;
	for (i in ocans) can[i] = ocans[i];
	if (typeof (bcar) == 'string' && bcar) { js.msg('msg', bcar); return; }
	if (typeof (bcar) == 'object') for (i in bcar) can[i] = bcar[i];

	js.tanbody('changeaction', tits, w, h, {
		html: '<div id="showuserssvie" style="height:' + h + 'px"><iframe src="" name="winiframe" width="100%" height="100%" frameborder="0"></iframe></div>',
		bbar: 'none'
	});

	if (nibo) {
		if (can.idobj) can.changevalue = can.idobj.value;
		changcallback = function (sna, sid) {
			if (can.idobj) can.idobj.value = sid;
			if (can.nameobj) {
				can.nameobj.value = sna;
				can.nameobj.focus();
			}
			js.changeuser_after(formname, can, sna, sid);
			js.tanclose('changeaction');
			if (can.callback) can.callback(sna, sid);
		}
		var url = 'index.php?d=system&m=dept&changetype=' + lx + '&changevalue=' + can.changevalue + '&callback=changcallback&changerange=' + can.changerange + '';
		winiframe.location.href = url;
	} else {
		$('#showuserssvie').chnageuser(can);
	}
	return false;
}
js.back = function () {
	if (isapp) {
		plus.webview.currentWebview().close('auto');
	} else if (apicloud) {
		api.historyBack({}, function (ret) { if (!ret.status) api.closeWin(); });
	} else {
		history.back();
	}
}
js.changeclear = function (na) {
	var fne = get(na).name;
	var bcar = js.changeuser_before(fne, 0);
	if (typeof (bcar) == 'string' && bcar) { js.msg('msg', bcar); return; }
	get(na).value = '';
	get(na + '_id').value = '';
	get(na).focus();
	js.changeuser_after(fne, { nameobj: get(na), idobj: get(na + '_id') }, '', '');
}
js.changedate = function (o1, id, v) {
	if (!v) v = 'date';
	$(o1).rockdatepicker({ initshow: true, view: v, inputid: id });
}
js.fileall = ',aac,ace,ai,ain,amr,app,arj,asf,asp,aspx,av,avi,bin,bmp,cab,cad,cat,cdr,chm,com,css,cur,dat,db,dll,dmv,doc,docx,dot,dps,dpt,dwg,dxf,emf,eps,et,ett,exe,fla,ftp,gif,hlp,htm,html,icl,ico,img,inf,ini,iso,jpeg,jpg,js,m3u,max,mdb,mde,mht,mid,midi,mov,mp3,mp4,mpeg,mpg,msi,nrg,ocx,ogg,ogm,pdf,php,png,pot,ppt,pptx,psd,pub,qt,ra,ram,rar,rm,rmvb,rtf,swf,tar,tif,tiff,txt,url,vbs,vsd,vss,vst,wav,wave,wm,wma,wmd,wmf,wmv,wps,wpt,wz,xls,xlsx,xlt,xml,zip,';
js.filelxext = function (lx) {
	if (js.fileall.indexOf(',' + lx + ',') < 0) lx = 'wz';
	return lx;
}
js.datechange = function (o1, lx) {
	if (!lx) lx = 'date';
	$(o1).rockdatepicker({ 'view': lx, 'initshow': true });
	return false;
}
js.selectdate = function (o1, inp, lx) {
	if (!lx) lx = 'date';
	$(o1).rockdatepicker({ 'view': lx, 'initshow': true, 'inputid': inp });
	return false;
}
js.importjs = function (url, fun) {
	var sid = jm.encrypt(url);
	if (!fun) fun = function () { };
	if (get(sid)) { fun(); return; }
	var scr = document.createElement('script');
	scr.src = url;
	scr.id = sid;
	if (isIE) {
		scr.onreadystatechange = function () {
			if (this.readyState == 'loaded' || this.readyState == 'complete') { fun(this); }
		}
	} else {
		scr.onload = function () { fun(this); }
	}
	document.getElementsByTagName('head')[0].appendChild(scr);
	return false;
}

js.replacecn = function (o1) {
	var val = strreplace(o1.value);
	val = val.replace(/[\u4e00-\u9fa5]/g, '');
	o1.value = val;
}

js.setselectdata = function (o, data, vfs, devs) {
	var i, ty = data, sv;
	if (!data) return;
	if (!vfs) vfs = 'name';
	if (typeof (devs) == 'undefined') devs = -1;
	for (i = 0; i < ty.length; i++) {
		o.options.add(new Option(ty[i].name, ty[i][vfs]));
		if (i == devs || ty[i].checked) sv = ty[i][vfs];
	}
	if (sv) o.value = sv;
}
//是否app上接口
function appobj1(act, can1) {
	var bo = false;
	if (typeof (appxinhu) == 'object') {
		if (appxinhu[act]) {
			try { appxinhu[act](can1); bo = true; } catch (e) { }
		}
	}
	return bo;
}
// 向PC客户端发送命令
js.cliendsend = function (at, cans, fun, ferr) {
	var dk = '2829';
	if (at == 'rockoffice') dk = '2827';
	var url = unescape('http%3A//127.0.0.1%3A' + dk + '/%3Fatype');
	if (!cans) cans = {}; if (!fun) fun = function () { }; if (!ferr) ferr = function () { return false; }
	url += '=' + at + '&callback=?';
	var llq = navigator.userAgent.toLowerCase();
	if (llq.indexOf('windows nt 5') > 0 && dk == '2829') {
		if (!ferr()) js.msg('msg', 'XP的系统不支持哦');
		return;
	}
	var i, v, bo = typeof (jm);
	for (i in cans) {
		v = cans[i];
		if (bo == 'object') v = 'base64' + jm.base64encode(v) + '';
		url += '&' + i + '=' + v + '';
	}
	var timeoout = setTimeout(function () { if (!ferr()) js.msg('msg', '无法使用，可能没有登录REIM客户端'); }, 500);
	$.getJSON(url, function (ret) { clearTimeout(timeoout); fun(ret); });
}

//发送文档编辑
js.sendeditoffice = function (id, lx) {
	if (!lx) lx = '0';
	this.ajax('api.php?m=upload&a=rockofficeedit', { id: id, lx: lx }, function (ret) {
		if (ret.success) {
			js.sendeditoffices(ret.data);
		} else {
			js.msg('msg', ret.msg);
		}
	}, 'get,json');
}
js.sendeditoffices = function (str) {
	js.cliendsend('rockoffice', { paramsstr: str }, false, function () { js.msg('msg', '无法使用，可能没有安装在线编辑插件'); return true; });
}

js.ontabsclicks = function () { };
js.inittabs = function () {
	$('.r-tabs div').click(function () {
		js.tabsclicks(this);
	});
}
js.tabsclicks = function (o1) {
	var o = $(o1);
	var tid = o.parent().attr('tabid');
	$('.r-tabs[tabid="' + tid + '"] div').removeClass('active');
	$('[tabitem][tabid="' + tid + '"]').hide();
	var ind = o.attr('index');
	o.addClass('active');
	var ho = $('[tabitem=' + ind + '][tabid="' + tid + '"]');
	ho.show();
	this.ontabsclicks(ind, tid, o, ho);
}
js.changdu = function (o) {
	var max = $(o).attr('maxlength');
	if (max > 0) {
		var zlen = o.value.length;
		if (zlen > parseFloat(max)) js.alert('录入数据长度' + zlen + '超过' + max + '总长度，其余会被截取掉');
	}
}
js.showmap = function (str) {
	var url = 'index.php?d=main&m=kaoqin&a=location&info=' + jm.base64encode(str) + '';
	js.location(url);
}